////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef __WN_SCRIPTING_ENGINE_DATA_H__
#define __WN_SCRIPTING_ENGINE_DATA_H__

namespace llvm {
    class IRBuilderBase;
    class Module;
    class ExecutionEngine;
    class FunctionPassManager;
};

class WNScopedVariableList;
class WNTypeManager;
class WNIdentifierMap;
class WNFunctionManager;
class WNScriptingEngine;

struct WNScriptingEngineData {
    WNScriptingEngineData():
        mBuilder(WN_NULL),
        mModule(WN_NULL),
        mExecutionEngine(WN_NULL),
        mScopedVariableList(WN_NULL),
        mTypeManager(WN_NULL),
        mIdentifierMap(WN_NULL),
        mFunctionManager(WN_NULL) {
    }

    llvm::IRBuilderBase*        mBuilder;
    llvm::Module*               mModule;
    llvm::ExecutionEngine*      mExecutionEngine;
    llvm::FunctionPassManager*  mFunctionPassManager;
    WNScopedVariableList*       mScopedVariableList;
    WNTypeManager*              mTypeManager;
    WNIdentifierMap*            mIdentifierMap;
    WNFunctionManager*          mFunctionManager;
    WNScriptingEngine*          mScriptingEngine;
};

#endif // __WN_SCRIPTING_ENGINE_H__
